package com.tecso.btx.admin.modelo;

import java.util.Map;

import javax.persistence.CascadeType;
import javax.persistence.Column;
import javax.persistence.Entity;
import javax.persistence.FetchType;
import javax.persistence.GeneratedValue;
import javax.persistence.Id;
import javax.persistence.JoinColumn;
import javax.persistence.JoinTable;
import javax.persistence.ManyToMany;
import javax.persistence.MapKey;
import javax.persistence.OneToMany;

@Entity
public class Grupo {

	@Id
	@Column 
	@GeneratedValue
	private int id_grupo;

	@Column(length = 32)
	private String nombre;
	
	@Column(length = 32)
	private String descripcion;
	
	@Column
	private long fecha_creacion;
	
	@Column
	private long fecha_modificacion;
	
	@OneToMany(fetch = FetchType.EAGER, cascade = CascadeType.REMOVE)
	@JoinTable(name = "grupo_grupo", joinColumns = @JoinColumn(name = "id_grupo"), inverseJoinColumns = @JoinColumn(name = "id_grupo_padre"))
	@MapKey(name="id_grupo")
	private Map<Integer, Grupo> sub_grupos;
	
	@ManyToMany(mappedBy="grupos", fetch=FetchType.LAZY)
	@MapKey(name="id_usuario")
	private Map<Integer, Usuario> usuarios;
		
	@ManyToMany(fetch = FetchType.EAGER)
	@JoinTable(name = "grupo_recurso", joinColumns = @JoinColumn(name = "id_grupo"), inverseJoinColumns = @JoinColumn(name = "id_recurso"))
	@MapKey(name="id_recurso")
	private Map<Integer, Recurso> recursos;
	
	public String getNombre() {
		return nombre;
	}
	public void setNombre(String nombre) {
		this.nombre = nombre;
	}
	public String getDescripcion() {
		return descripcion;
	}
	public void setDescripcion(String descripcion) {
		this.descripcion = descripcion;
	}
	public long getFecha_creacion() {
		return fecha_creacion;
	}
	public void setFecha_creacion(long fecha_creacion) {
		this.fecha_creacion = fecha_creacion;
	}
	public long getFecha_modificacion() {
		return fecha_modificacion;
	}
	public void setFecha_modificacion(long fecha_modificacion) {
		this.fecha_modificacion = fecha_modificacion;
	}
	public Map<Integer, Usuario> getUsuarios() {
		return usuarios;
	}
	public void setUsuarios(Map<Integer, Usuario> usuarios) {
		this.usuarios = usuarios;
	}

	public Map<Integer, Recurso> getRecursos() {
		return recursos;
	}
	public void setRecursos(Map<Integer, Recurso> recursos) {
		this.recursos = recursos;
	}

	public Map<Integer, Grupo> getSub_grupos() {
		return sub_grupos;
	}
	public void setSub_grupos(Map<Integer, Grupo> sub_grupos) {
		this.sub_grupos = sub_grupos;
	}
	public int getId_grupo() {
		return id_grupo;
	}
		
	
}
